package com.medsys.appservice;

import java.util.List;



import com.medsys.dao.DAOFactory;
import com.medsys.dao.PacienteDAO;
import com.medsys.model.Paciente;
/**
 * Classe de servi�os para a classe {@link Paciente}
 * @author Felipe Lauksas
 *
 */
public class PacienteAppService {
	/**
	 * M�todo para salvar um objeto do tipo {@link Paciente} no banco de dados.
	 * @param paciente do tipo {@link Pciente}.
	 */
	public void salvar(Paciente paciente) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		PacienteDAO pacienteDAO = daoFactory.getPacienteDAO();

		try {

			daoFactory.iniciarTransacao();

			pacienteDAO.salvar(paciente);

			daoFactory.encerrarTransacao();

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
	}
	/**
	 *	M�todo para alterar um objeto do tipo {@link Paciente} no banco de dados.
	 * @param paciente do tipo {@link Paciente}.
	 */
	public void alterar(Paciente paciente) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		PacienteDAO pacienteDAO = daoFactory.getPacienteDAO();

		try {

			daoFactory.iniciarTransacao();

			pacienteDAO.alterar(paciente);

			daoFactory.encerrarTransacao();

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
	}
	/**
	 * M�todo que retorna uma {@link List} com objetos do tipo {@link Paciente}.
	 * @return Objeto do tipo {@link List} populado com objetos do tipo {@link Paciente} de todo o banco de dados.
	 */
	public List<Paciente> listarTodos() {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		PacienteDAO pacienteDAO = daoFactory.getPacienteDAO();

		List<Paciente> listPacientes = null;
		
		try {

			listPacientes = pacienteDAO.listarTodos();

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return listPacientes;

	}
	/**
	 * M�todo que pesquisa um objeto do tipo {@link Paciente} no banco de dados
	 * @param Objeto {@link Long} referente ao ID do paciente
	 * @return Objeto do tipo {@link Paciente}
	 */
	public Paciente pesquisarPorId(Long id) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		PacienteDAO pacienteDAO = daoFactory.getPacienteDAO();

		Paciente paciente = null;
		
		try {

			paciente = pacienteDAO.pesquisarPorId(id);

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return paciente;

	}
	/**
	 * M�todo que pesquisa um objeto do tipo {@link Paciente} no banco de dados
	 * @param Objeto {@link Long} referente ao ID do paciente
	 * @return Objeto do tipo {@link Paciente}
	 */
	public Paciente pesquisarPorCpf(String cpf) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		PacienteDAO pacienteDAO = daoFactory.getPacienteDAO();

		Paciente paciente = null;
		
		try {

			paciente = pacienteDAO.pesquisarPorCpf(cpf);

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return paciente;

	}
	
	public Paciente listarHitoricoMedicoPaciente(Long id) {

		DAOFactory daoFactory = DAOFactory.getDAOFactory();

		PacienteDAO pacienteDAO = daoFactory.getPacienteDAO();	
		
		Paciente paciente = null;
		
		try {

			paciente = pacienteDAO.listarHitoricoMedicoPaciente(id);

		} catch (Exception e) {

			daoFactory.cancelarTransacao();

		} finally {

			daoFactory.fechar();

		}
		
		return paciente;

	}
}
